/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package si_rhnominafacil;


import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.awt.print.PageFormat;
/**
 *
 * @author michelle
 */
public class rh_imprimir {
 private Font fuente = new Font("Dialog", Font.PLAIN, 10);
	private PrintJob pj;
	private Graphics pagina;
    private Vector cadenas_a_imprimir;
    private JTextArea Objeto_textarea;
    private JTable Objeto_tabla;
    private int margen;
     public rh_imprimir()
	{
		this.cadenas_a_imprimir=new Vector(1);
	}

 public void imprimir_all(int opcion,int pag)
    {
        //LO COLOCO EN UN try/catch PORQUE PUEDEN CANCELAR LA IMPRESION
        this.pj = Toolkit.getDefaultToolkit().getPrintJob(new Frame(), "Imprimir Ticket", null);
        float dif=0;
        int bloquefactura=20,bloqueusado=0,controlfila=0,bloquefijo=0;
        //this.pj = Toolkit.getDefaultToolkit().getPrintJob(null, "Imprimir Ticket", null);
		try
		{
			pagina = pj.getGraphics();
            pagina.setFont(fuente);
			pagina.setColor(Color.black);
            int indice_arreglo=0,filas_impresion=0,ni=0,filas_dif=0,nip=0,nif=0;
            int nobjetotabla=this.getObjeto_tabla().getRowCount();
            int nobjetocadenas=this.cadenas_a_imprimir.size();
            String s="",s2="";
            if(pagina!=null)
            {
                //System.out.println("Numero de filas para imprimir: "+nobjetotabla);
                /*Impresion de encabezado*/
                for(indice_arreglo=0;indice_arreglo<nobjetocadenas &&
                        !(this.cadenas_a_imprimir.get(indice_arreglo)+"").equals("*")
                    ;indice_arreglo++,filas_impresion++)
                {
                    pagina.drawString(this.cadenas_a_imprimir.get(filas_impresion)+"",0,55+(filas_impresion*10));
                }
                filas_impresion+=2;
                /**/
                //mando imprimir recepcion normal
                if (opcion==1)
                 {
                        pagina.drawString("Nombre",15,50+(filas_impresion*10));//100
                        pagina.drawString("F.Ing.Trab.",130,50+(filas_impresion*10));//cantidad 20
                        pagina.drawString("Sueldo",190,50+(filas_impresion*10));//precio u 50
                        pagina.drawString("Hrs",250,50+(filas_impresion*10));//descuento 20
                        pagina.drawString("Bono",300,50+(filas_impresion*10));//total
                        pagina.drawString("Descanso",350,50+(filas_impresion*10));//total
                        pagina.drawString("Dia",400,50+(filas_impresion*10));//total
                        pagina.drawString("Prima",450,50+(filas_impresion*10));//total
                        pagina.drawString("Total",490,50+(filas_impresion*10));//total
                        pagina.drawString("Firmas",535,50+(filas_impresion*10));//total
                        filas_impresion+=1;
                        pagina.drawString("",15,50+(filas_impresion*10));//100
                        pagina.drawString("",130,50+(filas_impresion*10));//cantidad 20
                        pagina.drawString("",190,50+(filas_impresion*10));//precio u 50
                        pagina.drawString("Extras",250,50+(filas_impresion*10));//descuento 20
                        pagina.drawString("Apoyo",300,50+(filas_impresion*10));//total
                        pagina.drawString("Trabajado",350,50+(filas_impresion*10));//total
                        pagina.drawString("Festivo",400,50+(filas_impresion*10));//total
                        pagina.drawString("Dom.",450,50+(filas_impresion*10));//total
                        pagina.drawString("",500,50+(filas_impresion*10));//total
                        pagina.drawString("",530,50+(filas_impresion*10));//total

                        filas_impresion+=2;

                        for(int i=0;i<=60;i++)
                        {
                            pagina.drawString("-",i*10,50+(filas_impresion*10));
                        }
                        filas_impresion+=2;
                    /*Impresion de los productos*/
                        nif=((pag+1)*25);
                        nip=((pag+1)*25)-25;
                        if (nif < nobjetotabla )
                            {
                                nobjetotabla=nif;
                            }

                        System.out.println("revisa :"+nip+"final"+nif+"tabla"+nobjetotabla);

                        for(ni=nip;ni<nobjetotabla;filas_impresion+=1,ni++)
                           {
                                if((this.Objeto_tabla.getValueAt(ni,0)+"").length()>50)
                                    {
                                        s=(this.Objeto_tabla.getValueAt(ni,0)+"").substring(0,50);
                                    }
                                else
                                    {
                                        s=(this.Objeto_tabla.getValueAt(ni,0)+"");
                                    }
                                pagina.drawString(s.replace("<html>", "").replace("</html>", "").replace("<br>", "/"),15,50+((filas_impresion)*10));//descripcion 140 120 100
                                filas_impresion+=1;
                                pagina.drawString((this.Objeto_tabla.getValueAt(ni,1)+""),130,50+(filas_impresion*10));//codigo
                                pagina.drawString((this.Objeto_tabla.getValueAt(ni,2)+""),190,50+(filas_impresion*10));//codigo
                                pagina.drawString((this.Objeto_tabla.getValueAt(ni,3)+""),250,50+(filas_impresion*10));//precio
                                pagina.drawString((this.Objeto_tabla.getValueAt(ni,4)+""),300,50+(filas_impresion*10));//id
                                pagina.drawString((this.Objeto_tabla.getValueAt(ni,5)+""),350,50+(filas_impresion*10));//codigo
                                pagina.drawString((this.Objeto_tabla.getValueAt(ni,6)+""),400,50+(filas_impresion*10));//codigo
                                pagina.drawString((this.Objeto_tabla.getValueAt(ni,7)+""),450,50+(filas_impresion*10));//precio
                                pagina.drawString((this.Objeto_tabla.getValueAt(ni,8)+""),490,50+(filas_impresion*10));//id
                                if(s.length()>1)
                                pagina.drawString(("-------"),540,50+(filas_impresion*10));//id
                                //System.out.println("Imprimiendo :"+s);
                                //filas_impresion+=1;



                             }
                        System.out.println("Termine de imprimir los productos");
                           filas_impresion++;

                for(indice_arreglo++;indice_arreglo<nobjetocadenas &&
                       !(this.cadenas_a_imprimir.get(indice_arreglo)+"").equals("*")
                    ;filas_impresion++,indice_arreglo++)
                   {
                        pagina.drawString(this.cadenas_a_imprimir.get(indice_arreglo)+"",0,50+(filas_impresion*10));
                   }
               /*mensajes para pedido etc.*/
                 }//fin de imprecion de recepcion ahora sigue bloque para diferencias
                if (opcion==2)
                 {
                        pagina.drawString("Nombre",this.getMargen()+10,50+(filas_impresion*10));//100
                        pagina.drawString("",this.getMargen()+55,50+(filas_impresion*10));//cantidad 20
                        pagina.drawString("Duracion",this.getMargen()+200,50+(filas_impresion*10));//precio u 50
                        pagina.drawString("F.Ing.",this.getMargen()+250,50+(filas_impresion*10));//descuento 20
                        pagina.drawString("Tipo",this.getMargen()+285,50+(filas_impresion*10));//total
                        pagina.drawString("Dias",this.getMargen()+310,50+(filas_impresion*10));//total
                        pagina.drawString("Sal.Base",this.getMargen()+330,50+(filas_impresion*10));//total
                        pagina.drawString("Salario",this.getMargen()+375,50+(filas_impresion*10));//total
                        pagina.drawString("Sueldo",this.getMargen()+410,50+(filas_impresion*10));//total
                        pagina.drawString("Vales",this.getMargen()+450,50+(filas_impresion*10));//total
                        pagina.drawString("Prima",this.getMargen()+500,50+(filas_impresion*10));//total
                        pagina.drawString("Subtotal",this.getMargen()+550,50+(filas_impresion*10));//total
                        pagina.drawString("Subsidio al",this.getMargen()+600,50+(filas_impresion*10));//total
                        pagina.drawString("Total ",this.getMargen()+650,50+(filas_impresion*10));//total
                        pagina.drawString("ISR ",this.getMargen()+700,50+(filas_impresion*10));//total
                        pagina.drawString("IMSS",this.getMargen()+740,50+(filas_impresion*10));//total
                        pagina.drawString("Infonavit",this.getMargen()+780,50+(filas_impresion*10));//total
                        pagina.drawString("Total ",this.getMargen()+820,50+(filas_impresion*10));//total
                        pagina.drawString("Neto a",this.getMargen()+880,50+(filas_impresion*10));//total
                        pagina.drawString("Firmas",this.getMargen()+930,50+(filas_impresion*10));//total
                        filas_impresion+=1;
                        pagina.drawString("Curp/Rfc",this.getMargen()+10,50+(filas_impresion*10));//100
                        pagina.drawString("",this.getMargen()+55,50+(filas_impresion*10));//cantidad 20
                        pagina.drawString("Jornada",this.getMargen()+200,50+(filas_impresion*10));//precio u 50
                        pagina.drawString("Trab.",this.getMargen()+250,50+(filas_impresion*10));//descuento 20
                        pagina.drawString("salario",this.getMargen()+280,50+(filas_impresion*10));//total
                        pagina.drawString("",this.getMargen()+315,50+(filas_impresion*10));//total
                        pagina.drawString("Cotizacion",this.getMargen()+330,50+(filas_impresion*10));//total
                        pagina.drawString("Nominal",this.getMargen()+375,50+(filas_impresion*10));//total
                        pagina.drawString("",this.getMargen()+410,50+(filas_impresion*10));//total
                        pagina.drawString("Despensa",this.getMargen()+450,50+(filas_impresion*10));//total
                        pagina.drawString("Dominical",this.getMargen()+500,50+(filas_impresion*10));//total
                        pagina.drawString("",this.getMargen()+550,50+(filas_impresion*10));//total
                        pagina.drawString("Empleado",this.getMargen()+600,50+(filas_impresion*10));//total
                        pagina.drawString("Percepcion",this.getMargen()+650,50+(filas_impresion*10));//total
                        pagina.drawString("Sueldos",this.getMargen()+700,50+(filas_impresion*10));//total
                        pagina.drawString("",this.getMargen()+730,50+(filas_impresion*10));//total
                        pagina.drawString("",this.getMargen()+790,50+(filas_impresion*10));//total
                        pagina.drawString("Deducciones",this.getMargen()+820,50+(filas_impresion*10));//total
                        pagina.drawString("Pagar",this.getMargen()+880,50+(filas_impresion*10));//total
                        pagina.drawString("",this.getMargen()+930,50+(filas_impresion*10));//total
                        filas_impresion+=2;

                        for(int i=0;i<=95;i++)
                        {
                            pagina.drawString("-",i*10,50+(filas_impresion*10));
                        }
                        filas_impresion+=2;
                    /*Impresion de los productos*/
                        nif=((pag+1)*25);
                        nip=((pag+1)*25)-25;
                        if (nif < nobjetotabla )
                            {
                                nobjetotabla=nif;
                            }

                        System.out.println("revisa :"+nip+"final"+nif+"tabla"+nobjetotabla);

                        for(ni=nip;ni<nobjetotabla;filas_impresion+=1,ni++)
                           {
                                if((this.Objeto_tabla.getValueAt(ni,0)+"").length()>100)
                                    {
                                        s=(this.Objeto_tabla.getValueAt(ni,0)+"").substring(0,100);
                                    }
                                else
                                    {
                                        s=(this.Objeto_tabla.getValueAt(ni,0)+"");
                                    }
                                pagina.drawString(s.replace("<html>", "").replace("</html>", "").replace("<br>", "/"),this.getMargen()+10,50+((filas_impresion)*10));//descripcion 140 120 100
                                filas_impresion+=1;
                                pagina.drawString((""+this.Objeto_tabla.getValueAt(ni,1).toString().replace("<html>", "").replace("</html>", "").replace("<br>", "/")+""),this.getMargen()+10,50+(filas_impresion*10));//codigo
                                pagina.drawString((this.Objeto_tabla.getValueAt(ni,2)+""),this.getMargen()+215,50+(filas_impresion*10));//duracion
                                pagina.drawString((this.Objeto_tabla.getValueAt(ni,3)+""),this.getMargen()+240,50+(filas_impresion*10));//f ingreso
                                pagina.drawString((this.Objeto_tabla.getValueAt(ni,4)+""),this.getMargen()+295,50+(filas_impresion*10));//tipo sal
                                pagina.drawString((this.Objeto_tabla.getValueAt(ni,5)+""),this.getMargen()+315,50+(filas_impresion*10));//dias
                                pagina.drawString((this.Objeto_tabla.getValueAt(ni,6)+""),this.getMargen()+335,50+(filas_impresion*10));//sal base cotizacion
                                pagina.drawString((this.Objeto_tabla.getValueAt(ni,7)+""),this.getMargen()+375,50+(filas_impresion*10));//salario nominal
                                pagina.drawString((this.Objeto_tabla.getValueAt(ni,8)+""),this.getMargen()+410,50+(filas_impresion*10));//sueldo
                                pagina.drawString((this.Objeto_tabla.getValueAt(ni,9)+""),this.getMargen()+450,50+(filas_impresion*10));//id
                                pagina.drawString((this.Objeto_tabla.getValueAt(ni,10)+""),this.getMargen()+500,50+(filas_impresion*10));//id
                                pagina.drawString((this.Objeto_tabla.getValueAt(ni,11)+""),this.getMargen()+550,50+(filas_impresion*10));//id
                                pagina.drawString((this.Objeto_tabla.getValueAt(ni,12)+""),this.getMargen()+600,50+(filas_impresion*10));//id
                                pagina.drawString((this.Objeto_tabla.getValueAt(ni,13)+""),this.getMargen()+650,50+(filas_impresion*10));//id
                                pagina.drawString((this.Objeto_tabla.getValueAt(ni,14)+""),this.getMargen()+700,50+(filas_impresion*10));//id
                                pagina.drawString((this.Objeto_tabla.getValueAt(ni,15)+""),this.getMargen()+740,50+(filas_impresion*10));//id
                                pagina.drawString((this.Objeto_tabla.getValueAt(ni,16)+""),this.getMargen()+780,50+(filas_impresion*10));//id
                                pagina.drawString((this.Objeto_tabla.getValueAt(ni,17)+""),this.getMargen()+820,50+(filas_impresion*10));//id
                                pagina.drawString((this.Objeto_tabla.getValueAt(ni,18)+""),this.getMargen()+880,50+(filas_impresion*10));//id
                                if(s.length()>1)
                                pagina.drawString(("-------"),this.getMargen()+940,50+(filas_impresion*10));//id
                                //System.out.println("Imprimiendo :"+s);
                                //filas_impresion+=1;



                             }
                        System.out.println("Termine de imprimir los productos");
                           filas_impresion++;

                for(indice_arreglo++;indice_arreglo<nobjetocadenas &&
                       !(this.cadenas_a_imprimir.get(indice_arreglo)+"").equals("*")
                    ;filas_impresion++,indice_arreglo++)
                   {
                        pagina.drawString(this.cadenas_a_imprimir.get(indice_arreglo)+"",0,50+(filas_impresion*10));
                   }
               /*mensajes para pedido etc.*/
                 }//fin de imprecion de recepcion ahora sigue bloque para diferencias
                //mando imprimir recepcion normal

            }
            pagina.dispose();
            pagina.finalize();
			pj.end();
		}
        catch(Exception e)
		{
			System.out.println("LA IMPRESION HA SIDO CANCELADA..."+e.getMessage());
		}
	}//FIN DEL PROCEDIMIENTO imprimir(String)

    public void setOneItem_cadenas_a_imprimir(String s)
    {
        this.cadenas_a_imprimir.addElement(s);
    }
    /**
     * @return the Objeto_textarea
     */
    public JTextArea getObjeto_textarea() {
        return Objeto_textarea;
    }

    /**
     * @param Objeto_textarea the Objeto_textarea to set
     */
    public void setObjeto_textarea(JTextArea Objeto_textarea) {
        this.Objeto_textarea = Objeto_textarea;
    }

    /**
     * @return the Objeto_tabla
     */
    public JTable getObjeto_tabla() {
        return Objeto_tabla;
    }
 public void setObjeto_tabla(JTable Objeto_tabla) {
        this.Objeto_tabla = Objeto_tabla;
    }
    /**
     * @param Objeto_tabla the Objeto_tabla to set
     */
    public void setMargen(int omargen) {
        this.margen = omargen;
    }

    public int getMargen() {
        return margen;
    }


}
